package cn.bailan.service;
import cn.bailan.entity.MoralBalance;
import cn.bailan.entity.User;
import com.fasterxml.jackson.databind.node.ObjectNode;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
 * Author:甲粒子
 * Date: 2022/6/4
 * Description：用户相关服务
 */
public interface IUserService {

    /**
     * 小程序微信登录
     * @param data 登录请求数据
     * @param request 请求对象
     * @return
     */
    Object wxLogin(String data, HttpServletRequest request);

    /**
     * 微信登录，向微信服务器发送请求，并获取返回结果
     * @param data 客户端的请求信息
     * @param node 用于存储解析出的请求信息
     * @param params 存储小程序信息,appId,secret
     * @return 返回微信服务器返回的信息
     */
    String requestWX(String data, ObjectNode node, Map<String,String> params);

    /**
     * 解析数据
     * @param data 微信服务器返回的数据
     * @return 用ObjectNode承载
     */
    ObjectNode resolveData(String data);


    /**
     * 解密数据encryptedData
     * @param data resolveData(String data);的返回值
     * @return 用ObjectNode承载
     */
    ObjectNode resolveEncryptedData(ObjectNode data,ObjectNode node);


    /**
     * 新增用户
     * @param user 新增的用户
     * @return
     */
    int newUser(User user);

    /**
     * 查询用户是否存在
     * @param openId
     * @return
     */
    int existUser(String openId);

    /**
     * 查询用户userId
     * @param openId
     * @return
     */
    Integer selectUserId(String openId);

    /**
     * 查询用户user
     * @param openId
     * @return
     */
    User selectUser(String openId);

    /**
     * 更新用户信息:nickName
     * @param userId 用户id
     * @param nickName 用户昵称
     * @return
     */
    int setNickName(Integer userId,String nickName);

    /**
     * 更新用户信息:头像
     * @param userId 用户id
     * @param avatar 用户头像
     * @return
     */
    int setAvatar(Integer userId,String avatar);

    /**
     * 更新用户信息: 最近登录时间
     * @param userId 用户id
     * @param rTime 最近登录时间
     * @return
     */
    int setRTime(Integer userId,String rTime);

    /**
     * 更新用户信息
     * @param user 用户
     * @return
     */
    int updateUserInfo(User user);


    /**
     * 获取用户信息
     * @param userId 用户id
     * @return
     */
    User getUserInfo(Integer userId);

    /**
     * 获取用户数量
     * @return
     */
    long countUser();


    /**
     * 获取积分最高前25的用户
     * @return
     */
    List<User> getTop25Good();

    /**
     * 获取积分最低前25的用户
     * @return
     */
    List<User> getTop25Bad();

    /**
     * 分页获取用户信息
     * @param curPage 当前页
     * @param pageSize 页面大小
     * @return
     */
    List<User> getUserList(long curPage, int pageSize);

    /**
     * 更新用户分数
     * @return
     */
    int updateScore(Integer userId,double scoreChange);


    /**
     * 获取用户分数
     * @return
     */
    double getScore(Integer userId);

    /**
     * 更新用户连续登录
     * @return
     */
    int inrLoginDays(Integer userId);

    /**
     * 重置用户连续登录
     * @return
     */
    int resetLoginDays(Integer userId);

    /**
     * 获取最近登录时间
     * @return
     */
    String getRTime(Integer userId);

    /**
     * 获取一条鼓励的话
     * @return
     */
    String getInspiration();

    /**
     * 记录用户道德余额
     * @return
     */
    void addMoralBalance(MoralBalance moralBalance);

    /**
     * 判断要插入的是否已存在
     * @return
     */
    boolean existOne(MoralBalance moralBalance);

    /**
     * 获取道德余额列表
     * @return
     */
    List<MoralBalance> getMoralBalanceList(Integer userId,long curPage,int pageSize);

    /**
     * 道德余额记录条数
     * @return
     */
    long countMoralBalance(Integer userId);

    /**
     * 重置分数
     * @return
     */
    int  resetScore(Integer userId);
}
